package mx.ipn.persistencia.mysql;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Collection;

import mx.ipn.persistencia.dao.ServicioSistemaDAO;
import mx.ipn.to.ServicioSistemaTO;

public class ServicioSistemaDAOMySQL implements ServicioSistemaDAO {
	static{FabricaDeDAOsMySQL.iniciaLog(ServicioSistemaDAOMySQL.class);}

	private static final String INSERT = "INSERT INTO servicio_sistema (nombre,descripcion) VALUES(?,?)";
	private static final String DELETE = "DELETE FROM servicio_sistema WHERE id_servicio_sistema=?";
	private static final String UPDATE = "UPDATE servicio_sistema SET nombre=?, descripcion=? WHERE id_servicio_sistema=?";

	private static final String FINDBYID = "SELECT * FROM servicio_sistema WHERE id_servicio_sistema=?";
	private static final String SELECT = "SELECT * FROM servicio_sistema";
	private static final String SELECTBYNOMBRE = "SELECT * FROM servicio_sistema WHERE nombre=?";
	
	@Override
	public short deleteServicioSistema(int idServicioSistema) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			PreparedStatement ps = conexion.prepareStatement(DELETE);

			ps.setInt(1, idServicioSistema);

			ps.executeUpdate();

			if(ps.getUpdateCount() == 0){
				ps.close();
				conexion.close();
				return  0;
			}

			else{
				ps.close();
				conexion.close();		
			    return 1;
			}
		} catch (Exception e) {
			e.printStackTrace();
			return -1;
		}
	}

	@Override
	public ServicioSistemaTO findServicioSistemaById(int idServicioSistema) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			PreparedStatement ps = conexion.prepareStatement(FINDBYID);

			ps.setInt(1, idServicioSistema);

			ResultSet rs = ps.executeQuery();

			if (rs.next()) {
				idServicioSistema = rs.getInt("id_cliente");
				String nombre = rs.getString("nombre");
				String descripcion = rs.getString("descripcion");

				ServicioSistemaTO servicioSistemaTO = new ServicioSistemaTO(idServicioSistema,
						nombre, descripcion);

				ps.close();
				conexion.close();
				return servicioSistemaTO;
			}

			ps.close();
			conexion.close();
			return null;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public boolean insertServicioSistema(ServicioSistemaTO servicioSistemaTO) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			PreparedStatement ps = conexion.prepareStatement(INSERT);

			ps.setString(1, servicioSistemaTO.getNombre());
			ps.setString(2, servicioSistemaTO.getDescripcion());

			ps.executeUpdate();

			ps.close();
			conexion.close();

			return true;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
	}

	@Override
	public Collection<ServicioSistemaTO> selectServicioSistema() {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			PreparedStatement ps = conexion.prepareStatement(SELECT);

			ResultSet rs = ps.executeQuery();

			Collection<ServicioSistemaTO> coleccion = null;
			
			while (rs.next()) {
				if(coleccion==null)
					coleccion = new ArrayList<ServicioSistemaTO>();
				
				int idServicioSistema = rs.getInt("id_servicio_sistema");
				String nombre = rs.getString("nombre");
				String descripcion = rs.getString("descripcion");

				ServicioSistemaTO servicioSistemaTO = new ServicioSistemaTO(idServicioSistema,
						nombre, descripcion);

				coleccion.add(servicioSistemaTO);
			}

			ps.close();
			conexion.close();

			return coleccion;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public Collection<ServicioSistemaTO> selectServicioSistemaByNombre(String nombre) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			PreparedStatement ps = conexion.prepareStatement(SELECTBYNOMBRE);

			ps.setString(1, nombre);
			
			ResultSet rs = ps.executeQuery();

			Collection<ServicioSistemaTO> coleccion = null;

			while (rs.next()) {
				if(coleccion==null)
					coleccion = new ArrayList<ServicioSistemaTO>();
				
				int idServicioSistema = rs.getInt("id_servicio_sistema");
				String nom = rs.getString("nombre");
				String descripcion = rs.getString("descripcion");

				ServicioSistemaTO servicioSistemaTO = new ServicioSistemaTO(idServicioSistema,
						nom, descripcion);

				coleccion.add(servicioSistemaTO);
			}

			ps.close();
			conexion.close();

			return coleccion;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public short updateServicioSistema(ServicioSistemaTO servicioSistemaTO) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			PreparedStatement ps = conexion.prepareStatement(UPDATE);

			ps.setString(1, servicioSistemaTO.getNombre());
			ps.setString(2, servicioSistemaTO.getDescripcion());
			ps.setInt(3, servicioSistemaTO.getIdServicioSistema());

			ps.executeUpdate();

			if(ps.getUpdateCount() == 0){
				ps.close();
				conexion.close();
				return  0;
			}

			else{
				ps.close();
				conexion.close();		
			    return 1;
			}
		} catch (Exception e) {
			e.printStackTrace();
			return (short)-1;
		}
	}

}
